//****************** Array.from  ****************/

//* arguments对象
function foo() {
    var args = Array.from(arguments)
}

//* 上面代码中，字符串和 Set 结构都具有 Iterator 接口，因此可以被Array.from转为真正的数组。
let namesSet = new Set(['a', 'b'])
Array.from(namesSet) // ['a', 'b']


//****************** Array.of  *******************/

//* Array.of方法用于将一组值，转换为数组。 
Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
Array.of(3).length // 1

//* 这个方法的主要目的，是弥补数组构造函数Array()的不足。因为参数个数的不同，会 
//* 导致Array()的行为有差异。
Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]


//****************** find  *******************/

[1, 4, -5, 10].find((n) => n < 0)
// -5

[1, 5, 10, 15].find(function (value, index, arr) {
    return value > 9;
}) // 10


//****************** fill  *******************/

['a', 'b', 'c'].fill(7)
// [7, 7, 7]

new Array(3).fill(7)
// [7, 7, 7]

//****************** 数组实例的 entries()，keys() 和 values()  *******************/

for (let index of ['a', 'b'].keys()) {
    console.log(index);
}
// 0
// 1

for (let elem of ['a', 'b'].values()) {
    console.log(elem);
}
// 'a'
// 'b'

for (let [index, elem] of ['a', 'b'].entries()) {
    console.log(index, elem);
}
// 0 "a"
// 1 "b"


//****************** 数组实例的 includes()  *******************/

[1, 2, 3].includes(2)     // true
[1, 2, 3].includes(4)     // false
[1, 2, NaN].includes(NaN) // true


//* 该方法的第二个参数表示搜索的起始位置，默认为0。如果第二个参数为负数，则表
//* 示倒数的位置，如果这时它大于数组长度（比如第二个参数为-4，但数组长度为
//* 3），则会重置为从0开始。
[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true



//****************** 数组实例的 flat()，flatMap()  *******************/

[1, 2, [3, 4]].flat()
// [1, 2, 3, 4]


//* 如果原数组有空位，flat()方法会跳过空位。 
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]

